const api = require('../../utils/api');

Page({
  data: {
    loading: false,
    userInfo: null,
    canIUseGetUserProfile: false
  },

  onLoad() {
    // 检查是否支持getUserProfile
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      });
    }
    
    // 检查是否已经登录
    this.checkLoginStatus();
  },

  // 检查登录状态
  checkLoginStatus() {
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');
    
    if (token && userInfo) {
      // 已登录，跳转到首页
      wx.switchTab({
        url: '/pages/class/index'
      });
    }
  },

  // 微信登录 - 直接获取用户信息
  wxLogin() {
    if (this.data.loading) return;
    
    this.setData({ loading: true });
    console.log('开始微信登录流程');

    // 直接调用getUserProfile，由用户点击触发
    if (this.data.canIUseGetUserProfile) {
      console.log('使用getUserProfile API');
      wx.getUserProfile({
        desc: '用于完善用户资料',
        success: (res) => {
          console.log('getUserProfile成功:', res);
          if (res.userInfo) {
            // 获取用户信息成功后，再获取登录凭证
            this.getWxCodeAndLogin(res.userInfo);
          } else {
            this.handleLoginError(new Error('用户信息为空'));
          }
        },
        fail: (error) => {
          console.error('getUserProfile失败:', error);
          this.handleLoginError(new Error('获取用户信息失败: ' + error.errMsg));
        }
      });
    } else {
      console.log('使用getUserInfo API (旧版本)');
      // 兼容旧版本
      wx.getUserInfo({
        success: (res) => {
          console.log('getUserInfo成功:', res);
          if (res.userInfo) {
            // 获取用户信息成功后，再获取登录凭证
            this.getWxCodeAndLogin(res.userInfo);
          } else {
            this.handleLoginError(new Error('用户信息为空'));
          }
        },
        fail: (error) => {
          console.error('getUserInfo失败:', error);
          this.handleLoginError(new Error('获取用户信息失败: ' + error.errMsg));
        }
      });
    }
  },

  // 获取微信登录凭证并调用后端
  async getWxCodeAndLogin(userInfo) {
    try {
      console.log('开始获取微信登录凭证');
      // 获取微信登录凭证
      const loginRes = await this.getWxCode();
      console.log('获取登录凭证成功:', loginRes);

      // 调用后端登录接口
      const loginResult = await api.wxUserApi.login({
        code: loginRes.code,
        nickname: userInfo.nickName,
        avatarUrl: userInfo.avatarUrl
      });

      console.log('后端登录成功:', loginResult);

      if (loginResult.code === 200) {
        // 保存用户信息和token
        wx.setStorageSync('token', loginResult.data.token);
        wx.setStorageSync('userInfo', loginResult.data);
        
        // 显示登录成功提示
        wx.showToast({
          title: '登录成功',
          icon: 'success',
          duration: 1500
        });

        // 跳转到首页
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/class/index'
          });
        }, 1500);

      } else {
        throw new Error(loginResult.msg || '登录失败');
      }

    } catch (error) {
      console.error('登录失败:', error);
      this.handleLoginError(error);
    } finally {
      this.setData({ loading: false });
    }
  },

  // 处理登录错误
  handleLoginError(error) {
    console.error('登录失败:', error);
    
    // 根据错误类型显示不同的提示
    let errorMessage = '登录失败，请重试';
    if (error.message.includes('获取用户信息失败')) {
      errorMessage = '需要授权获取用户信息才能登录';
    } else if (error.message.includes('微信登录失败')) {
      errorMessage = '微信登录失败，请检查网络连接';
    } else if (error.message.includes('请求失败')) {
      errorMessage = '网络请求失败，请检查后端服务';
    }
    
    wx.showModal({
      title: '登录失败',
      content: errorMessage,
      showCancel: true,
      cancelText: '重试',
      confirmText: '跳过登录',
      success: (res) => {
        if (res.confirm) {
          // 用户选择跳过登录
          this.skipLogin();
        } else if (res.cancel) {
          // 用户选择重试
          this.setData({ loading: false });
        }
      }
    });
  },

  // 获取微信登录凭证
  getWxCode() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            resolve(res);
          } else {
            reject(new Error('获取登录凭证失败'));
          }
        },
        fail: (error) => {
          reject(new Error('微信登录失败'));
        }
      });
    });
  },


  // 跳过登录（仅用于测试）
  skipLogin() {
    wx.showModal({
      title: '提示',
      content: '跳过登录将无法使用完整功能，确定要跳过吗？',
      success: (res) => {
        if (res.confirm) {
          wx.switchTab({
            url: '/pages/class/index'
          });
        }
      }
    });
  },

  // 测试登录（用于调试）- 直接跳过登录
  testLogin() {
    console.log('测试登录 - 跳过后端验证，直接进入首页');
    
    this.setData({ loading: true });

    // 设置模拟的用户信息和token（仅用于测试）
    const mockUserInfo = {
      userId: 'test_user_' + Date.now(),
      nickname: '测试教师',
      avatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0',
      role: 'teacher'
    };
    
    const mockToken = 'test_token_' + Date.now();
    
    // 保存到本地存储
    wx.setStorageSync('token', mockToken);
    wx.setStorageSync('userInfo', mockUserInfo);
    
    console.log('已保存测试用户信息:', mockUserInfo);
    
    // 显示提示
    wx.showToast({
      title: '跳过登录成功',
      icon: 'success',
      duration: 1500
    });

    // 延迟跳转到首页
    setTimeout(() => {
      wx.switchTab({
        url: '/pages/class/index'
      });
      this.setData({ loading: false });
    }, 1500);
  }
});
